const { Compare, defaultCompare, swap } = require('../../util');

function bubbleSort(array, compareFn = defaultCompare) {
  const { length } = array; // {1}
  // {2} 外循环 会从数组的第一位迭代至最后一位 控制了在数组中经过多少轮排序（应该是数组中每项都经过一轮，轮数和数组长度一致）
  for (let i = 0; i < length; i++) {
    // {3} 内循环 从第一位迭代至倒数第二位  相邻两项的比较
    for (let j = 0; j < length - 1; j++) {
      // {4} 当前项和下一项比较
      if (compareFn(array[j], array[j + 1]) === Compare.BIGGER_THAN) {
        swap(array, j, j + 1); // {5}
      }
    }
  }
  return array;
}

exports.bubbleSort = bubbleSort;
